最近遇到这样一个事:许多DBA的小伙伴不太明白金融业务中复借用户的定义方式以及sql查询方式,给他们提需求也整不明白,需求如下:
根据订单编号,查询用户该订单所对应的复借次数(白话讲就是:我有一笔订单,想看看这笔订单是用户在本平台的第几笔订单)
既然他们整不明白,那就自己写吧。
下面简单介绍下“复借”,再列举几种在mysql、oracle数据库中统计用户复借次数的方式。sql能力就是一点点提升的,希望能够抛砖引玉,窥一斑而知全豹。
一、如何定义复借
复借是指在一个贷款平台借款订单还清后继续申请贷款的行为
复借次数即为该用户累计成功借还款的总次数
在数据库中,统计复借这个指标,用到的基本为还款表:即每个用户(user_id)的每一笔订单(apply_id)对应的还款情况(是否到期,是否成功还款)。
基本思路:成功还款1次,复贷次数+1
另外,考虑产品记期方式不同,我们分单期和多期两种产品来讨论
二、单期产品
方法1:Mysql之子查询计数
简单的说,就是两张相同的表做左外联,统计user_id相同时,第一张表apply_id比第二张表apply_id大的数据
内联子查询:生成两张相同的表,然后做左外联,这样表2中与表1user_id相同的数据就都会被查询得到,结果如下:
再用where做一层判断,把表1比表2apply_id大的数据筛选出来。效果如下:
:
对应的sql大致如下:
select * from
(SELECT * FROM repayment ) a
left join
(SELECT * FROM repayment ) b
on a.user_id = b